package main

import "fmt"

/*
切片创建方式:
【1】方式1：定义一个切片，然后让切片去引用一个已经创建好的数组。
【2】方式2：通过make内置函数来创建切片。基本语法: var切片名[type = make([], len,[cap])
PS : make底层创建一个数组，对外不可见，所以不可以直接操作这个数组，要通过slice去间接的访问各个元素，不可以直接对数组进行维护/操作
【3】方式3：定一个切片，直接就指定具体数组，使用原理类似make的方式。
*/

func main() {
	slice1()

	fmt.Println("---------------- ---------------- ----------------")

	slice2()

	fmt.Println("---------------- ---------------- ----------------")

	slice3()

}

func slice3() {
	slice := []int{1, 4, 7}
	fmt.Println("slice=", slice)
	//切片元素个数
	fmt.Println("slice元素个数=", len(slice))
	//获取切片的容量,容量可以动态变化(容量=长度*系数)
	fmt.Println("slice容量大小=", cap(slice))
}

func slice2() {
	//定义切片
	//make函数的三个参数: 1.切片类型 2.切片长度 3.切片容量
	//不可以直接操作源数组,需要通过操作切片来操作
	slice := make([]int, 4, 20)
	fmt.Println("slice=", slice)
	//切片元素个数
	fmt.Println("slice元素个数=", len(slice))
	//获取切片的容量,容量可以动态变化(容量=长度*系数)
	fmt.Println("slice容量大小=", cap(slice))
}

func slice1() {
	//定义一个数组
	var intArr [6]int = [6]int{3, 6, 9, 1, 4, 7}
	//切片构建在数组之上
	//定义一个切片名字为slice,[]动态变化的数组长度不写,int类型,intArr是原数组
	//[1:3]切片 - 切出的一段片段 - 索引:从1开始,到3结束(不包含3) - [1,3)
	var slice []int = intArr[1:3]
	//输出数组
	fmt.Println("intArr=", intArr)
	//输出切片
	fmt.Println("slice=", slice)
	fmt.Println("slice元素个数=", len(slice))
	//获取切片的容量,容量可以动态变化(容量=长度*系数)
	fmt.Println("slice容量大小=", cap(slice))
}
